home *** CD-ROM | disk | FTP | other *** search
/ Gekikoh Dennoh Club 7 / Gekikoh Dennoh Club Vol. 7 (Japan).7z / Gekikoh Dennoh Club Vol. 7 (Japan) (Track 01).bin / games / otoko / source.lzh / FuncEnemy / boss03.c < prev    next >
Encoding:
C/C++ Source or Header  |  1999-06-14  |  2.7 KB  |  128 lines

  1. #include <xsp2lib.h>
  2.  
  3. #include "../otoko.h"
  4. #include "../player.h"
  5. #include "../enemy.h"
  6. #include "../eshot.h"
  7. #include "../effect.h"
  8. #include "../priority.h"
  9. #include "../sound.h"
  10.  
  11. #define PALET_BOSS03    0x0400
  12.  
  13. static short EnemyMoveBoss03 (ENEMY *);
  14. static void EnemyTiniBoss03 (ENEMY *);
  15.  
  16.  
  17. void EnemyInitBoss03 (ENEMY * p)
  18. {
  19.     p->vx = 0;
  20.     p->vy = 32768;
  21.     p->hit_px = 24;
  22.     p->hit_py = 16;
  23.     p->hit_sx = 24;
  24.     p->hit_sy = 16;
  25.     p->hit_cx = 6;
  26.     p->damage = 0;
  27.     p->flash = 0;
  28.     p->hp = 1000;
  29.     p->pt = obj_oplaser;
  30.     p->core_pt = sp_core01;
  31.     p->work = 0;
  32.     p->func_enemy_move = EnemyMoveBoss03;
  33.     p->func_enemy_tini = EnemyTiniBoss03;
  34. }
  35.  
  36.  
  37.  
  38. static short EnemyMoveBoss03 (ENEMY * p)
  39. {
  40.     /* 速度を足して上位ワード(固定整数部)だけ取り出す */
  41.     p->x = (p->lx += p->vx) >> 16;
  42.     p->y = (p->ly += p->vy) >> 16;
  43.  
  44.     switch (p->work) {
  45.     case 0:
  46.         if (SHORT_LY > 64) {
  47.             p->work++;
  48.             p->work2 = 0;
  49.             p->work3 = 0;
  50.             p->s_angle = 64 + 32;    /* 左から出る弾の角度 */
  51.             p->s_angle2 = 64 - 32;    /* 右から出る弾の角度 */
  52.         }
  53.         break;
  54.     case 1:
  55.         p->work2++;
  56.         /* 画面外に出たら消去 */
  57.         if (SHORT_LY > 256 + 32)
  58.             return (-1);    /* 消去 */
  59.  
  60.         if (p->work2 < 48) {
  61.             p->work3++;
  62.             if (p->work3 >= 4) {
  63.                 p->work3 = 0;
  64.                 EshotInit (ESHOT_NRG01, SHORT_LX, SHORT_LY + 12, 4, p->s_angle, 0);
  65.                 EshotInit (ESHOT_NRG01, SHORT_LX, SHORT_LY + 12, 4, p->s_angle2, 0);
  66.                 SoundSetSE (SE_ESHOT_M);    /* 敵ショット音 */
  67.                 p->s_angle -= 8;
  68.                 p->s_angle2 += 8;
  69.             }
  70.         }
  71.         if (p->work2 >= 96) {
  72.             p->work2 = 0;
  73.             p->work3 = 0;
  74.             p->s_angle = 64 + 32;    /* 左から出る弾の角度 */
  75.             p->s_angle2 = 64 - 32;    /* 右から出る弾の角度 */
  76.         }
  77.         break;
  78.     }
  79.  
  80.     /* 自機ショットに当たった時の処理 */
  81.     if (p->damage) {
  82.         if (p->damage_core) {
  83.             SoundSetSE (SE_CORE_DAMAGE);
  84.             p->info = PALET_RED | PRIORITY_BOSS;
  85.             p->damage_core = 0;
  86.         } else {
  87.             SoundSetSE (SE_DAMAGE);
  88.             p->info = PALET_DAMAGE | PRIORITY_BOSS;
  89.         }
  90.         if ((p->hp -= p->damage) <= 0) {
  91.             EffectInit (EFFECT_EXPL, 0, p->x, p->y);
  92.             SoundSetSE (SE_EXPL_M);    /* 中ボス爆発音 */
  93.             if (disp_level == DISP_LEVEL_HIGH)
  94.                 EffectInit (EFFECT_HAHENMINI, 0, p->x, p->y);
  95.             return (-1);    /* 消去 */
  96.         }
  97.         p->damage = 0;
  98.         p->flash = TIMER_FLASH_DAMAGE;
  99.     } else {
  100.         if ((p->flash++ > TIMER_FLASH_RED) && (p->hp < 300)) {
  101.             p->info = PALET_RED | PRIORITY_BOSS;
  102.             if (p->flash > TIMER_FLASH_NORMAL)
  103.                 p->flash = 0;
  104.         } else {
  105.             p->info = PALET_BOSS03 | PRIORITY_BOSS;
  106.         }
  107.     }
  108.  
  109.     xobj_set_st (p);
  110.  
  111.     /* コアの表示 */
  112.     p->core_x = p->x - 8;    /* コアの中心は (-8,-8) ドットずれる */
  113.     p->core_y = p->y - 8;
  114.     if (player->y < p->y + 64)    /* 自機との座標の差が小さければ赤 */
  115.         p->core_info = PALET_CORE_BLUE | PRIORITY_BOSS_CORE;
  116.     else
  117.         p->core_info = PALET_CORE_RED | PRIORITY_BOSS_CORE;
  118.     xsp_set_st (&(p->core_x));
  119.  
  120.     return (0);
  121. }
  122.  
  123.  
  124.  
  125. static void EnemyTiniBoss03 (ENEMY * p)
  126. {
  127. }
  128.